// 接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。
// 1. 描述对象
interface Person {
  // 必须属性
  name: string;
  age: number;
  // 可选属性
  sex?: string;
  // 只读属性
  readonly code: number;
  // 其他属性
  [propsName: string]: any;
}

const o: Person = {
  name: "章三",
  age: 18,
  code: 100,
  height: 180,
  weight: "100kg",
};

const o1: Person = {
  name: "李四",
  age: 18,
  sex: "男",
  code: 120,
};

o.name = "王五";
// o.code = 1000

export {};

// 2. 函数类型
interface Fn {
  (x: number, y: number): number;
}

const fnn: Fn = (x: number, y: number): number => x + y;

// 3. 可索引的类型
interface Arr {
  [propsName: number]: number;
}

const arr: Arr = [1, 2, 3, 4, 5];

const arr1: number[] = [1, 2, 3, 4, 5];

// 4. 类 类型
